package tests;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class Keyongyu {
    /**
     * 现有T个人围成一桌坐下，编号从1到T，从编号为1的人开始报数。
     * 报数也从1开始，报到M的人离席，从离席者的下一位在座成员开始，继续从1开始报数。
     * 求最后一个在座的成员编号。
     */
    public static void main(String[] args) {
        int T = 41;
        int M = 3;
        testQueue(T, M);
    }

    /**
     * 采用队列实现，思路直接
     */
    private static void testQueue(int T, int M) {
        Queue<Integer> queue = new LinkedList<>();
        //初始化队列
        for (int i = 0; i < T; i++) {
            queue.add((i + 1));
        }
        int times = 0;
        System.out.print("出局顺序:");
        while (queue.size() > 1) {
            for (int i = 1; i <= M; i++) {
                times++;
                Integer people = queue.poll();//报数
                if (i == M) {
                    //数到M的人出局
                    System.out.print(people + ",");
                } else {
                    //不需要出局的人排在后面
                    queue.add(people);
                }
            }
        }
        //存活
        System.out.println("存活:" + queue + ",报数次数=" + times);
    }
}